package com.async.designpatterns.behavior.templatemethod;

/**
 * 抽象类admission 定义了新生入学的基本流程，但是在不同学校中，其具体实现过程有所不同
 */
public  abstract class AbstractAdmission {

    /**
     * 入学登记
     */
    public abstract void checkIn();

    /**
     * 申请寝室
     */
    public abstract void applyDormitory();

    /**
     * 领取书本
     */
    public abstract void receivingBooks();

    /**
     * 获取学生类型，用于钩子方法
     * @return
     */
    public abstract int getStudentType();

    /**
     * 定义入学登记的基本流程
     */
    public void admission(){
        checkIn();
        applyDormitory();
        receivingBooks();
    }

    /**
     * 钩子方法
     */
    public void hook() {
        //确定学生类型
        if (getStudentType()==1){
            System.out.println("初中生入学！");
        } else {
            System.out.println("高中生入学！");
        }
    }
}
